{
 "cells": [
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:53.280542Z",
     "start_time": "2025-05-18T12:59:53.274038Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ],
   "outputs": [],
   "execution_count": 48
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:53.341993Z",
     "start_time": "2025-05-18T12:59:53.327484Z"
    }
   },
   "source": [
    "path =  'ex1data1.txt'#加载文件\n",
    "data = pd.read_csv(path, header=None, names=['Population', 'Profit'])\n",
    "#pandas库pd.read_csv操作可以读取分隔符csv文件和文本text文件，filepath_or_buffer:顾名思义，您读取的文件路径,URL（包含http,ftp,s3）链接等\n",
    "# sep：指定分隔符，默认为逗号',如果不指定参数，则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘\\s+’,将使用python的语法分析器。\n",
    "# 正则表达式中\\s匹配任何空白字符，包括空格、制表符、换页符等等, 等价于[ \\f\\n\\r\\t\\v]，而“\\s+”则表示匹配任意多个上面的字符。\n",
    "# header：指定哪一行作为表头。默认设置为0（即第一行作为表头），如果没有表头的话，要修改参数，设置header=None\n",
    "# names：指定列的名称，用列表表示。一般我们没有表头，即header=None时，这个用来添加列名就很有用啦！\n",
    "data.head()#用来查看前5行数据"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Population   Profit\n",
       "0      6.1101  17.5920\n",
       "1      5.5277   9.1302\n",
       "2      8.5186  13.6620\n",
       "3      7.0032  11.8540\n",
       "4      5.8598   6.8233"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Population</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6.1101</td>\n",
       "      <td>17.5920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5.5277</td>\n",
       "      <td>9.1302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8.5186</td>\n",
       "      <td>13.6620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.0032</td>\n",
       "      <td>11.8540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.8598</td>\n",
       "      <td>6.8233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 49
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:53.434342Z",
     "start_time": "2025-05-18T12:59:53.422215Z"
    }
   },
   "source": "data.describe()#data.describe( )：describe() 函数可以查看数据的基本情况，包括：count 非空值数、mean 平均值、std 标准差、max 最大值、min 最小值、（25%、50%、75%）分位数等。",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "       Population     Profit\n",
       "count   97.000000  97.000000\n",
       "mean     8.159800   5.839135\n",
       "std      3.869884   5.510262\n",
       "min      5.026900  -2.680700\n",
       "25%      5.707700   1.986900\n",
       "50%      6.589400   4.562300\n",
       "75%      8.578100   7.046700\n",
       "max     22.203000  24.147000"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Population</th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>97.000000</td>\n",
       "      <td>97.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>8.159800</td>\n",
       "      <td>5.839135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.869884</td>\n",
       "      <td>5.510262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>5.026900</td>\n",
       "      <td>-2.680700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>5.707700</td>\n",
       "      <td>1.986900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>6.589400</td>\n",
       "      <td>4.562300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>8.578100</td>\n",
       "      <td>7.046700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>22.203000</td>\n",
       "      <td>24.147000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 50
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:53.791075Z",
     "start_time": "2025-05-18T12:59:53.686462Z"
    }
   },
   "source": [
    "#pandas画图函数，kind='scatter'代表散点图，需指定X轴Y轴\n",
    "data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ],
      "image/png": "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WLRo0YjnHj58OC/FAQAAQKnKOZDfcsstcfXVV0dHR0e8/e1vj02bNsXcuXOnsDQAAAAoXePah/yss86Ks846K26++eZ417veFVVVVVNVFwAAAJS0TJIkyUQf3NXVFTt37oyIiJUrV0ZdXV3eCsuXvr6+qKmpid7e3qiurk67HAAAAEpcrjk050XdjjU4OBgf+tCHYvHixdHU1BRNTU2xePHiWLduXQwODk64aAAAACgXEwrkH/vYx2Lr1q1xzz33RE9PT/T09MT3v//92Lp1a3z84x/Pd40AAABQciY0ZL22tjb+1//6X3HRRRdltW/ZsiXe/e53R1dXV77qmzRD1gEAAJhOUz5kfeHChSe0L1iwwJB1AAAAyMGEAvmFF14YN998c7z00ktDbb///e/j1ltvjQsvvDBvxQEAAECpGte2Z0d9+ctfjssuuyzOOOOMOPfccyMi4he/+EWccsopcd999+W1QAAAAChFE972bHBwML71rW/Fb37zm4iIOPvss+N973tfnHrqqXktcLLMIQcAAGA65ZpDx91DfujQoTjrrLPi3nvvjQ9/+MOTKhIAAADK1bjnkFdWVmbNHQcAAADGb0KLuq1fvz7+8i//Ml5++eV81wMAZWdXV39s2bk3OrsH0i4FAJhGE1rU7bHHHosHHngg/u///b9xzjnnxKxZs7KO33nnnXkpDgBKWc/gwdjYuiPa2ruG2poa6qKluTFqqipTrAwAmA4T6iGfO3duvPOd74xLL700Fi9eHDU1NVkfuWpra4u3ve1tsXjx4shkMnH33XdnHU+SJD7zmc/E6aefHqeeemqsWbMm2tvbJ1IyABScja07YltHd1bbto7u2NC6PaWKAIDpNK4e8iNHjsQXvvCF+H//7//FwYMH45JLLolbbrllwiurDwwMxLnnnhsf+tCH4qqrrjrh+Oc///n4yle+Et/85jejvr4+Pv3pT8ell14a//Iv/xKnnHLKhL4mABSCXV39WT3jRx1Okmhr74rO7oGor501zCMBgFIxrkD+F3/xF3HLLbfEmjVr4tRTT42vfOUr0dXVFd/4xjcm9MUvv/zyuPzyy4c9liRJfPnLX44/+7M/iyuuuCIiIjZv3hwLFy6Mu+++O66++uoJfU0AKAR79g+Oenz3PoEcAErduIasb968Of7mb/4m7rvvvrj77rvjBz/4QXzrW9+K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CmXSjj43x/O87e7ujsOHD3uuF7mXXnopPvnJT0Zzc3NUV1ePeN54XwcoDJdddlls3rw5HnjggfjLv/zL2Lp1a1x++eVx+PDhYc/3vC4N3/zmN2POnDljDmH2vC58R44cieuvvz5Wr14dr33tayPiD6/ZM2bMOOFN1NGepxN5nWd6DXevj9fd3R2f/exn4yMf+cio1xrv7/58GP3tASbt8ssvH/r36173urjgggti6dKl8d3vfjend18pTrfffntcfvnlsXjx4hHPufDCC+PCCy8c+vwNb3hDnH322fG3f/u38dnPfnY6ygQm6NChQ/Hud787kiSJr33ta6Oe63WgOF199dVD/z7nnHPida97Xbzyla+MBx98MN70pjelWBlT6Rvf+Ea8733vG3ORVc/rwrd+/fp48sknze0vA2Pd676+vnjrW98ar371q+OWW24Z9Vpp/O7XQz7N5s6dG6961auio6Nj2OOLFi06YaXHF154IRYtWjQd5ZEHe/bsiZ/85Cfxn/7TfxrX4yorK6OxsXHEnw0K09Hn5niet7W1tVFRUeG5XqSOhvE9e/bE/fffP2rv+HDGeh2gMC1fvjxqa2tHvG+e18XvH//xH2Pnzp3jfv2O8LwuNNddd13ce++9sWXLljjjjDOG2hctWhQHDx6Mnp6erPNHe55O5HWe6TPSvT7qxRdfjMsuuyzmzJkTd911V1RWVo7r+mP97s8HgXya9ff3x1NPPRWnn376sMcvvPDCeOCBB7La7r///qyeVArbpk2bYsGCBfHWt751XI87fPhw/OpXvxrxZ4PCVF9fH4sWLcp63vb19cUjjzwy4vN2xowZcd5552U95siRI/HAAw94rhe4o2G8vb09fvKTn8T8+fPHfY2xXgcoTL/97W9j3759I943z+vid/vtt8d5550X55577rgf63ldGJIkieuuuy7uuuuu+OlPfxr19fVZx88777yorKzMep7u3Lkznn766RGfpxN5nWfqjXWvI/5wn9785jfHjBkz4p577pnQ9sJj/e7Pi2ldQq4MffzjH08efPDBpLOzM9m2bVuyZs2apLa2Ntm7d2+SJEnyH//jf0w+9alPDZ2/bdu25OSTT06++MUvJr/+9a+Tm2++OamsrEx+9atfpfVfYBwOHz6cnHnmmcknP/nJE44df69vvfXW5L777kueeuqp5Iknnkiuvvrq5JRTTkn++Z//eTpLJgcvvvhisn379mT79u1JRCRf+tKXku3btw+trP25z30umTt3bvL9738/+eUvf5lcccUVSX19ffL73/9+6BqXXHJJ0tLSMvT5P/zDPyQzZ85M7rjjjuRf/uVfko985CPJ3Llzk+eff37a/3/8m9Hu9cGDB5O3v/3tyRlnnJHs2LEjee6554Y+Dhw4MHSN4+/1WK8DpGO0e/3iiy8mN954Y/LQQw8lnZ2dyU9+8pPk3/27f5c0NDQkL7300tA1PK+Lw1i/w5MkSXp7e5Oqqqrka1/72rDX8LwuDtdee21SU1OTPPjgg1m/owcHB4fO+ehHP5qceeaZyU9/+tPk8ccfTy688MLkwgsvzLrOypUrkzvvvHPo81xe55leY93r3t7e5IILLkjOOeecpKOjI+ucl19+eeg6x97rXH/355tAPsXe8573JKeffnoyY8aM5BWveEXynve8J+no6Bg6/qd/+qfJBz7wgazHfPe7301e9apXJTNmzEhe85rXJD/84Q+nuWom6r777ksiItm5c+cJx46/19dff31y5plnJjNmzEgWLlyYvOUtb0l+/vOfT2O15GrLli1JRJzwcfR+HjlyJPn0pz+dLFy4MJk5c2bypje96YSfgaVLlyY333xzVltLS8vQz8CqVauShx9+eJr+R4xktHvd2dk57LGISLZs2TJ0jePv9VivA6RjtHs9ODiYvPnNb07q6uqSysrKZOnSpcmHP/zhE4K153VxGOt3eJIkyd/+7d8mp556atLT0zPsNTyvi8NIv6M3bdo0dM7vf//75L/8l/+SnHbaaUlVVVXyjne8I3nuuedOuM6xj8nldZ7pNda9Hul5HxFJZ2dn1nWOPibX3/35lvnXQgAAAIBpZA45AAAApEAgBwAAgBQI5AAAAJACgRwAAABSIJADAABACgRyAAAASIFADgAAACkQyAGAE1x00UVx/fXXF8x1AKAUCeQAUGDWrl0bmUwmMplMzJgxI1asWBF//ud/Hi+//HLapY3owQcfjEwmEz09PVntd955Z3z2s59NpygAKHAnp10AAHCiyy67LDZt2hQHDhyIH/3oR7F+/fqorKyMm266Ke3SxmXevHlplwAABUsPOQAUoJkzZ8aiRYti6dKlce2118aaNWvinnvuid/97ndxzTXXxGmnnRZVVVVx+eWXR3t7+9Dj7rjjjpg7d27cfffd0dDQEKecckpceuml8cwzzwyds3bt2rjyyiuzvt71118fF1100Yj1/N3f/V380R/9UcyZMycWLVoU733ve2Pv3r0REbF79+64+OKLIyLitNNOi0wmE2vXro2IE4es51r/fffdF2effXbMnj07Lrvssnjuuecm+J0EgMIlkANAETj11FPj4MGDsXbt2nj88cfjnnvuiYceeiiSJIm3vOUtcejQoaFzBwcH4y/+4i9i8+bNsW3btujp6Ymrr756Ul//0KFD8dnPfjZ+8YtfxN133x27d+8eCt1LliyJ//2//3dEROzcuTOee+65+Ou//uthr5Nr/V/84hfj7/7u76KtrS2efvrpuPHGGydVPwAUIkPWAaCAJUkSDzzwQNx3331x+eWXx9133x3btm2LN7zhDRER8a1vfSuWLFkSd999d7zrXe+KiD+E5//xP/5HXHDBBRER8c1vfjPOPvvsePTRR2PVqlUTquNDH/rQ0L+XL18eX/nKV+L888+P/v7+mD179tDQ9AULFsTcuXOHvUZ7e3vcc889OdX/9a9/PV75yldGRMR1110Xf/7nfz6hugGgkOkhB4ACdO+998bs2bPjlFNOicsvvzze8573xNq1a+Pkk08eCtoREfPnz4+VK1fGr3/966G2k08+Oc4///yhz88666yYO3du1jnj9cQTT8Tb3va2OPPMM2POnDnxp3/6pxER8fTTT+d8jV//+tc51V9VVTUUxiMiTj/99KHh8QBQSgRyAChAF198cezYsSPa29vj97//fXzzm9+MTCaTl2ufdNJJkSRJVtuxQ8aPNzAwEJdeemlUV1fHt771rXjsscfirrvuioiIgwcP5qWmY1VWVmZ9nslkTqgXAEqBQA4ABWjWrFmxYsWKOPPMM+Pkk/8ww+zss8+Ol19+OR555JGh8/bt2xc7d+6MV7/61UNtL7/8cjz++ONDn+/cuTN6enri7LPPjoiIurq6ExZJ27Fjx4i1/OY3v4l9+/bF5z73ufiTP/mTOOuss07osZ4xY0ZERBw+fHjE6+RaPwCUC4EcAIpEQ0NDXHHFFfHhD384fvazn8UvfvGLeP/73x+veMUr4oorrhg6r7KyMjZs2BCPPPJIPPHEE7F27dr44z/+46H545dcckk8/vjjsXnz5mhvb4+bb745nnzyyRG/7plnnhkzZsyIlpaW2LVrV9xzzz0n7C2+dOnSyGQyce+990ZXV1f09/dPuH4AKBcCOQAUkU2bNsV5550X//7f//u48MILI0mS+NGPfpQ1zLuqqio++clPxnvf+95YvXp1zJ49O77zne8MHb/00kvj05/+dHziE5+I888/P1588cW45pprRvyadXV1cccdd8T3vve9ePWrXx2f+9zn4otf/GLWOa94xSvi1ltvjU996lOxcOHCuO666yZcPwCUi0xiUhYAlIw77rgjrr/++ujp6Um7FABgDHrIAQAAIAUCOQAAAKTAkHUAAABIgR5yAAAASIFADgAAACkQyAEAACAFAjkAAACkQCAHAACAFAjkAAAAkAKBHAAAAFIgkAMAAEAKBHIAAABIwf8PAjVmRBDTEPsAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 51
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "代价函数：首先，我们将创建一个以参数θ为特征函数的代价函数：\n",
    "$$ J(θ)=\\frac{1}{2m}\\sum\\limits_{i=1}^{m}{{{\\left( {{h}_{\\theta }}\\left( {{x}^{(i)}} \\right)-{{y}^{(i)}} \\right)}^{2}}} $$\n",
    "其中：$${{h}_{\\theta }}\\left( x \\right)={{\\theta }^{T}}X={{\\theta }_{0}}{{x}_{0}}+{{\\theta }_{1}}{{x}_{1}}+{{\\theta }_{2}}{{x}_{2}}+...+{{\\theta }_{n}}{{x}_{n}}$$"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:54.071705Z",
     "start_time": "2025-05-18T12:59:54.062138Z"
    }
   },
   "source": [
    "#求J(θ)\n",
    "def computeCost(X, y, theta):#X代表训练集\n",
    "    inner = np.power(((X * theta.T) - y), 2)#theta.T代表theta的转置矩阵\n",
    "    #numpy.power()用于数组元素求n次方，numpy.power(x1, x2) ：x2可以是数字，也可以是数组，但是x1和x2的列数要相同\n",
    "    return np.sum(inner) / (2 * len(X))"
   ],
   "outputs": [],
   "execution_count": 52
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了考虑截距项（$θ_0 $），我们向X添加额外的第一列，并将其设置为all one。这使得我们可以将$θ_0 $简单地看作另一个“特性”。\n",
    "即：$$ {{h}_{\\theta }}\\left( x \\right)= {{\\theta}_{0}}+ {{\\theta}_{1}{{x}_1}}$$"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:54.381391Z",
     "start_time": "2025-05-18T12:59:54.367368Z"
    }
   },
   "source": [
    "data.insert(0, 'Ones', 1,allow_duplicates=True)#在data的指定列中插入数据。\n",
    "# 可选参数，如果dataframe中已经存在某列，将allow_duplicates置为true才可以将指定得列插入。"
   ],
   "outputs": [],
   "execution_count": 53
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "初始化数据"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:54.491227Z",
     "start_time": "2025-05-18T12:59:54.481205Z"
    }
   },
   "source": [
    "cols = data.shape[1]#shape函数是numpy.core.fromnumeric中的函数，它的功能是读取矩阵的长度，\n",
    "#比如shape[0]就是读取矩阵第一维度的长度,相当于行数;shape[1]相当于列数\n",
    "X = data.iloc[:,0:cols-1]#提取所有行，从0列到cols-1列的所有数据\n",
    "y = data.iloc[:,cols-1:cols]#提取所有行，从cols-1列到cols列的所有数据\n",
    "#例：data.iloc[[0,1],[0,1]] #提取第0、1行，第0、1列中的数据\n",
    "X.head()#head()是观察前5行"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   Ones  Population\n",
       "0     1      6.1101\n",
       "1     1      5.5277\n",
       "2     1      8.5186\n",
       "3     1      7.0032\n",
       "4     1      5.8598"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Ones</th>\n",
       "      <th>Population</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>6.1101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>5.5277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>8.5186</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>7.0032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>5.8598</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 54
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看y"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:54.600383Z",
     "start_time": "2025-05-18T12:59:54.585860Z"
    }
   },
   "source": [
    "y.head()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "    Profit\n",
       "0  17.5920\n",
       "1   9.1302\n",
       "2  13.6620\n",
       "3  11.8540\n",
       "4   6.8233"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>17.5920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9.1302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13.6620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>11.8540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6.8233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 55
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "代价函数是应该是numpy矩阵，所以我们需要转换X和Y，然后才能使用它们。 我们还需要初始化theta。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:54.740968Z",
     "start_time": "2025-05-18T12:59:54.729475Z"
    }
   },
   "source": [
    "X = np.matrix(X.values)\n",
    "y = np.matrix(y.values)\n",
    "theta = np.matrix(np.array([0,0]))"
   ],
   "outputs": [],
   "execution_count": 56
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看下三个矩阵的维度"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:55.007072Z",
     "start_time": "2025-05-18T12:59:54.993360Z"
    }
   },
   "source": [
    "X.shape, theta.shape, y.shape"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((97, 2), (1, 2), (97, 1))"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 57
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算代价函数 (theta初始值为0)."
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:55.239230Z",
     "start_time": "2025-05-18T12:59:55.228721Z"
    }
   },
   "source": [
    "computeCost(X, y, theta)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(32.072733877455676)"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 58
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实现批量梯度下降\n",
    "使用梯度下降算法来求出代价函数${{J}({\\theta}_{0},{\\theta}_{1})} $的最小值,\n",
    "批量梯度下降算法的公式如下：\n",
    "$$ {{\\theta }_{j}}:={{\\theta }_{j}}-\\alpha \\frac{\\partial }{\\partial {{\\theta }_{j}}}J\\left( \\theta  \\right)(for\\ j=0\\ and\\ j=1) $$"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:55.364494Z",
     "start_time": "2025-05-18T12:59:55.351413Z"
    }
   },
   "source": [
    "def gradientDescent(X, y, theta, alpha, iters):\n",
    "    temp = np.matrix(np.zeros(theta.shape))\n",
    "    parameters = int(theta.ravel().shape[1])\n",
    "    cost = np.zeros(iters)\n",
    "    \n",
    "    for i in range(iters):\n",
    "        error = (X * theta.T) - y\n",
    "        \n",
    "        for j in range(parameters):\n",
    "            term = np.multiply(error, X[:,j])\n",
    "            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))\n",
    "            \n",
    "        theta = temp\n",
    "        cost[i] = computeCost(X, y, theta)\n",
    "        \n",
    "    return theta, cost"
   ],
   "outputs": [],
   "execution_count": 59
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "初始化 学习速率α和要执行的迭代次数。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:55.473702Z",
     "start_time": "2025-05-18T12:59:55.460718Z"
    }
   },
   "source": [
    "alpha = 0.01\n",
    "iters = 1000"
   ],
   "outputs": [],
   "execution_count": 60
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行梯度下降算法来将我们的参数θ适合于训练集"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:55.598183Z",
     "start_time": "2025-05-18T12:59:55.544839Z"
    }
   },
   "source": [
    "g, cost = gradientDescent(X, y, theta, alpha, iters)\n",
    "g"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[-3.24140214,  1.1272942 ]])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 61
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后，使用拟合的参数计算训练模型的代价函数（误差）。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:55.675511Z",
     "start_time": "2025-05-18T12:59:55.662349Z"
    }
   },
   "source": [
    "computeCost(X, y, g)\n"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(4.515955503078914)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 62
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制线性模型以及数据，直观地看出它的拟合。"
   ]
  },
  {
   "cell_type": "code",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-18T12:59:55.909244Z",
     "start_time": "2025-05-18T12:59:55.780522Z"
    }
   },
   "source": [
    "x = np.linspace(data.Population.min(), data.Population.max(), 100)\n",
    "f = g[0, 0] + (g[0, 1] * x)\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(x, f, 'r', label='Prediction')\n",
    "ax.scatter(data.Population, data.Profit, label='Traning Data')\n",
    "ax.legend(loc=2)\n",
    "ax.set_xlabel('Population')\n",
    "ax.set_ylabel('Profit')\n",
    "ax.set_title('Predicted Profit vs. Population Size')\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x800 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+QAAAK9CAYAAACtq6aaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAoI9JREFUeJzs3Xd4VVXahvH7JJRQQigSEhQRUMGIgmDDNlgQLNjriIJdih2lON8gzgCiomAB66Aj9hELFhyxjo6Kio0BG0Z0NBRBEoqhJPv7Y08igQSSkGSfJPfvunKNWdk55805ccyz11rvigVBECBJkiRJkqpUQtQFSJIkSZJUGxnIJUmSJEmKgIFckiRJkqQIGMglSZIkSYqAgVySJEmSpAgYyCVJkiRJioCBXJIkSZKkCBjIJUmSJEmKgIFckiRJkqQIGMglSVVip512YsCAAYWfv/nmm8RiMd58883IatrUpjXGg5kzZ9K1a1eSkpKIxWKsWLGCAQMGsNNOO0VdWo1z/fXXE4vFKvQx4/H3fFPVoUZJqqkM5JJUCzz44IPEYrHCj6SkJHbddVeGDBnC4sWLoy6vTF566SWuv/76SGvY+LVMSEigdevWHHnkkRUeaJYtW8Zpp51GgwYNuOuuu3j44Ydp1KjRZtetWbOG66+/Pq4D1ffff1/kdUtMTGTHHXfkxBNP5NNPP426vG02efJkHnzwwajLKCI/P5+///3v7LfffjRv3pzk5GR23XVXzjnnHN5///2oy5MkAXWiLkCSVHVuuOEG2rVrR25uLu+88w5TpkzhpZdeYu7cuTRs2LBKaznkkEP47bffqFevXpm+76WXXuKuu+6KPJT36tWLc845hyAIyMzMZPLkyRx22GG8+OKLHHXUURXyHB9++CErV67kL3/5C0cccUTh+H333Ud+fn7h52vWrGH06NEA9OzZs0Keu7KceeaZHH300eTl5TF//nymTJnCyy+/zPvvv0/Xrl2jLq/cJk+ezHbbbbfZCovy/p5XhMsuu4y77rqL448/nrPOOos6derw1Vdf8fLLL9O+fXv233//yGuUpNrOQC5JtchRRx3F3nvvDcAFF1xAixYtuPXWW3nuuec488wzi/2e1atXFzsru60SEhJISkqq8MetKrvuuiv9+vUr/PzEE09kzz33ZOLEiSUG8tzcXOrVq0dCQukWqC1ZsgSApk2bFhmvW7du+YqOA926dSvyuh144IEcd9xxTJkyhXvuuSfCyipHVL/nixcvZvLkyVx44YXce++9Rb42ceJEli5dWvh5df93UZKqM5esS1ItdthhhwGQmZkJwIABA2jcuDELFizg6KOPJjk5mbPOOgsIl79OnDiR3XffnaSkJFq1asXFF1/Mr7/+WuQxgyDgr3/9KzvssAMNGzbk0EMP5T//+c9mz13SvtUPPviAo48+mmbNmtGoUSP23HNPJk2aVFjfXXfdBRRdNl6gomssiz322IPtttuu8LUs+Pkef/xx/vSnP7H99tvTsGFDcnJyAHjqqafo3r07DRo0YLvttqNfv3789NNPhY/Xs2dP+vfvD8A+++xDLBYrnH3deA/5999/T8uWLQEYPXp04WtS0gqCjz76iFgsxkMPPbTZ11555RVisRgvvPACACtXruSKK65gp512on79+qSmptKrVy/mzJmzTa/Vxjb9HYStvzbw++/qd999R+/evWnUqBGtW7fmhhtuIAiCwutK+j0rWEK/tWXmU6dO5bDDDiM1NZX69euTkZHBlClTilyz00478Z///Ie33nqr8PUvWKlQ0vOX5Wf86aefOOGEE2jcuDEtW7Zk6NCh5OXlbbHuzMxMgiDgwAMP3OxrsViM1NTUEl+jTbe4bPyx6QqMadOmFf4czZs354wzzuDHH3/cYm2SpN85Qy5JtdiCBQsAaNGiReHYhg0b6N27NwcddBC33HJL4VL2iy++mAcffJBzzz2Xyy67jMzMTO68804++eQT3n333cJZ2z//+c/89a9/5eijj+boo49mzpw5HHnkkaxbt26r9bz66qsce+yxpKenc/nll5OWlsb8+fN54YUXuPzyy7n44ov5+eefefXVV3n44Yc3+/6qqLEkv/76K7/++is777xzkfG//OUv1KtXj6FDh7J27Vrq1atXWOM+++zDuHHjWLx4MZMmTeLdd9/lk08+oWnTplx33XV07NiRe++9t3CrQYcOHTZ73pYtWzJlyhQGDhzIiSeeyEknnQTAnnvuWWyde++9N+3bt+fJJ58sDPwFnnjiCZo1a0bv3r0BuOSSS/jHP/7BkCFDyMjIYNmyZbzzzjvMnz+fbt26lfu12timv4OleW0K5OXl0adPH/bff39uuukmZs6cyahRo9iwYQM33HBDhdQ3ZcoUdt99d4477jjq1KnDjBkzGDRoEPn5+QwePBgIZ5wvvfRSGjduzHXXXQdAq1atSnzMsv6MvXv3Zr/99uOWW25h1qxZTJgwgQ4dOjBw4MASn6Nt27ZAGPxPPfXUMm1JOeSQQzb792vhwoX86U9/KhLkx4wZw//93/9x2mmnccEFF7B06VLuuOMODjnkkM1+DklSCQJJUo03derUAAhmzZoVLF26NPjxxx+Dxx9/PGjRokXQoEGD4L///W8QBEHQv3//AAiGDx9e5Pv/9a9/BUDwyCOPFBmfOXNmkfElS5YE9erVC4455pggPz+/8LqRI0cGQNC/f//CsTfeeCMAgjfeeCMIgiDYsGFD0K5du6Bt27bBr7/+WuR5Nn6swYMHB8X956syaiwJEJx//vnB0qVLgyVLlgQffPBBcPjhhwdAMGHChCI/X/v27YM1a9YUfu+6deuC1NTUoHPnzsFvv/1WOP7CCy8EQPDnP/+5cKzgffvwww+LPH///v2Dtm3bFn6+dOnSAAhGjRq11dqDIAhGjBgR1K1bN1i+fHnh2Nq1a4OmTZsG5513XuFYSkpKMHjw4FI95tZkZmYGQDB69Ohg6dKlwaJFi4I333wz2GuvvQIgePrpp8v02hT8rl566aWFY/n5+cExxxwT1KtXL1i6dGkQBJv/nm1az9SpUwvHRo0atdnv1sbvXYHevXsH7du3LzK2++67B3/4wx82u3bT5y/Pz3jDDTcUecy99tor6N69+2bPtalzzjknAIJmzZoFJ554YnDLLbcE8+fP32qNm/rtt9+C7t27B61btw6ysrKCIAiC77//PkhMTAzGjBlT5NovvvgiqFOnzmbjkqTiuWRdkmqRI444gpYtW9KmTRvOOOMMGjduzDPPPMP2229f5LpNZ96eeuopUlJS6NWrF7/88kvhR/fu3WncuDFvvPEGALNmzWLdunVceumlRZaSX3HFFVut7ZNPPiEzM5Mrrrhis5m10hxFVRU1buyBBx6gZcuWpKamst9++/Huu+9y1VVXbfY4/fv3p0GDBoWff/TRRyxZsoRBgwYV2bd7zDHH0KlTJ1588cUy1VEep59+OuvXr2f69OmFY//85z9ZsWIFp59+euFY06ZN+eCDD/j5558r7LlHjRpFy5YtSUtLo2fPnixYsIDx48dz0kknleu1GTJkSOE/x2IxhgwZwrp165g1a1aF1Lvxe5ednc0vv/zCH/7wB7777juys7PL/Hjl+RkvueSSIp8ffPDBfPfdd1t9rqlTp3LnnXfSrl07nnnmGYYOHcpuu+3G4Ycfvtny+C0ZNGgQX3zxBU8//TRpaWkATJ8+nfz8fE477bQi/76lpaWxyy67FP77JknaMpesS1Itctddd7HrrrtSp04dWrVqRceOHTdrMFanTh122GGHImPffPMN2dnZRZarbqyg+djChQsB2GWXXYp8vWXLljRr1myLtRUsXe7cuXPpf6AqrnFjxx9/PEOGDCEWi5GcnMzuu+9ebPO7du3aFfm84Pk7duy42bWdOnXinXfeKXUN5dWlSxc6derEE088wfnnnw+Ey9W32267wj3dADfddBP9+/enTZs2dO/enaOPPppzzjmH9u3bl/u5L7roIk499VQSEhJo2rQpu+++O/Xr1wfK/tokJCRsVsuuu+4KhHvEK8K7777LqFGjeO+991izZk2Rr2VnZ5OSklKmxyvrz5iUlFTYI6BAs2bNNuuLUJyEhAQGDx7M4MGDWbZsGe+++y533303L7/8MmeccQb/+te/tvoY99xzD1OnTuWee+4p7MoO4b9vQRBs9u9RgerceFCSqpKBXJJqkX333bewy3pJ6tevv1lIz8/PJzU1lUceeaTY79k0MEShqmvcYYcdihxFVpKNZ1jjyemnn86YMWP45ZdfSE5O5vnnn+fMM8+kTp3f/zQ47bTTOPjgg3nmmWf45z//yc0338z48eOZPn16uY9222WXXUr1ulWUklZXbK0pGoQ3iQ4//HA6derErbfeSps2bahXrx4vvfQSt912W5Gj5ypLYmJihTxOixYtOO644zjuuOPo2bMnb731FgsXLizca16c2bNnc/nll3PBBRdw0UUXFflafn4+sViMl19+udgaGzduXCF1S1JNZyCXJG1Vhw4dmDVrFgceeOAWA2bBH/fffPNNkZnLpUuXbnVGr6Bh2dy5c7cY2EoKWFVRY0UoeP6vvvqqyGx0wdiWAlJJSrOkf1Onn346o0eP5umnn6ZVq1bk5ORwxhlnbHZdeno6gwYNYtCgQSxZsoRu3boxZsyYCjtrfWNlfW3y8/P57rvvCmfFAb7++muAwi70BaseVqxYUeR7C2aqt2TGjBmsXbuW559/nh133LFwvLjl2KV9Dyrj/S+rvffem7feeousrKwSn2/p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U+LzrVu3jvz8fNq0aVOhs+6qWRo0aEDdunVZuHAh69atIykpKeqSJEmSJNUAcRPI8/PzueKKKzjwwAPp3Llz4fgf//hH2rZtS+vWrfn8888ZNmwYX331FdOnTy/2ccaNG8fo0aPL9NzOeGpr/B2RJEmSVNFiQRAEURcBMHDgQF5++WXeeecddthhhxKve/311zn88MP59ttv6dChw2ZfL26GvE2bNmRnZ9OkSZMi1+bm5pKZmUm7du2c9dQW+bsiSZIkqbRycnJISUkpNoduLC5myIcMGcILL7zA22+/vcUwDrDffvsBlBjI69evT/369SulTkmSJEmSKkqk63CDIGDIkCE888wzvP7667Rr126r3/Ppp58CkJ6eXsnVCWDAgAGccMIJhZ/37NmTK664YpsesyIeQ5IkSZKqu0hnyAcPHsyjjz7Kc889R3JyMosWLQIgJSWFBg0asGDBAh599FGOPvpoWrRoweeff86VV17JIYccwp577hll6ZEbMGAADz30EAB169Zlxx135JxzzmHkyJHUqVN5b+v06dOpW7duqa598803OfTQQ/n1119p2rRpuR5DkiRJkmqqSAP5lClTgHDGdGNTp05lwIAB1KtXj1mzZjFx4kRWr15NmzZtOPnkk/nTn/4UQbXxp0+fPkydOpW1a9fy0ksvMXjwYOrWrcuIESOKXLdu3boKOz970w74UT2GJEmSJFV3kS9ZL+5jwIABALRp04a33nqLZcuWkZubyzfffMNNN920xU3x21gQrF4dzUc5euvVr1+ftLQ02rZty8CBAzniiCN4/vnnC5eZjxkzhtatW9OxY0cAfvzxR0477TSaNm1K8+bNOf744/n+++8LHy8vL4+rrrqKpk2b0qJFC6699lo27fm36XLztWvXMmzYMNq0aUP9+vXZeeedeeCBB/j+++859NBDAWjWrBmxWKzwfd30MX799VfOOeccmjVrRsOGDTnqqKP45ptvCr/+4IMP0rRpU1555RV22203GjduTJ8+fcjKyirzayZJkiRJ8cKznDa2Zg00bhzNx5o121x+gwYNWLduHQCvvfYaX331Fa+++iovvPAC69evp3fv3iQnJ/Ovf/2Ld999tzDYFnzPhAkTePDBB/nb3/7GO++8w/Lly3nmmWe2+JznnHMOjz32GLfffjvz58/nnnvuoXHjxrRp04ann34agK+++oqsrCwmTZpU7GMMGDCAjz76iOeff5733nuPIAg4+uijWb9+/UZvzRpuueUWHn74Yd5++21++OEHhg4dus2vmSRJkiRFJS66rGvbBEHAa6+9xiuvvMKll17K0qVLadSoEffff3/hUvVp06aRn5/P/fffTywWA8KtAU2bNuXNN9/kyCOPZOLEiYwYMYKTTjoJgLvvvptXXnmlxOf9+uuvefLJJ3n11Vc54ogjAGjfvn3h1wuWpqemphbZQ76xb775hueff553332XAw44AIBHHnmENm3a8Oyzz3LqqacCsH79eu6+++7CzvpDhgzhhhtuKO9LJkmSJEmRM5BvrGFDWLUquucuoxdeeIHGjRuzfv168vPz+eMf/8j111/P4MGD2WOPPYrsG//ss8/49ttvSU5OLvIYubm5LFiwgOzsbLKysgqPlQOoU6cOe++992bL1gt8+umnJCYm8oc//KHMtReYP38+derUKfK8LVq0oGPHjsyfP79wrGHDhkWOuUtPT2fJkiXlfl5JkiRJipqBfGOxGDRqFHUVpXbooYcyZcoU6tWrR+vWrYt0V2+0yc+xatUqunfvziOPPLLZ47Rs2bJcz9+gQYNyfV95bNqVPRaLlXijQJIkSZKqA/eQV2ONGjVi5513Zscdd9zqUWfdunXjm2++ITU1lZ133rnIR0pKCikpKaSnp/PBBx8Ufs+GDRv4+OOPS3zMPfbYg/z8fN56661iv14wQ5+Xl1fiY+y2225s2LChyPMuW7aMr776ioyMjC3+TJIkSZJUnRnIa4mzzjqL7bbbjuOPP55//etfZGZm8uabb3LZZZfx3//+F4DLL7+cG2+8kWeffZYvv/ySQYMGsWLFihIfc6eddqJ///6cd955PPvss4WP+eSTTwLQtm1bYrEYL7zwAkuXLmVVMdsBdtllF44//nguvPBC3nnnHT777DP69evH9ttvz/HHH18pr4UkSZIkxQMDeS3RsGFD3n77bXbccUdOOukkdtttN84//3xyc3MLj5G7+uqrOfvss+nfvz89evQgOTmZE088cYuPO2XKFE455RQGDRpEp06duPDCC1m9ejUA22+/PaNHj2b48OG0atWKIUOGFPsYU6dOpXv37hx77LH06NGDIAh46aWXNlumLkmSJKn2yssPeG/BMp779CfeW7CMvPzqv4U1FtTwjbg5OTmk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vfce+++//1YfMycnh5SUFLKzs2nSpEll/wiSJEmStHX5+WHYHjsWPv44HKtbFwYMgGHDoEOHKKvTNiptDo2rPeTZ2dkANG/eHICPP/6Y9evXc8QRRxRe06lTJ3bccccSA/natWtZu3Zt4ec5OTmVXLUkSZIkldL69fD44zBuHMyfH441aAAXXwxXXx2eJ65aI24CeX5+PldccQUHHnggnTt3BmDRokXUq1ePpk2bFrm2VatWLFq0qNjHGTduHKNHj67sciVJkiSp9HJz4cEHw67p338fjqWkwJAhcPnl0LJllNUpInETyAcPHszcuXN55513tulxRowYwVVXXVX4eU5ODm3atNnW8iRJkiSp7FatgnvugQkTICsrHGvZEq68EgYNCkO5aq24CORDhgzhhRde4O2332aHjZZopKWlsW7dOlasWFFklnzx4sWkpaUV+1j169enfv36lV2yJEmSJJVs+XK44w64/fbwnwHatIFrroHzz4eGDaOtT3Eh0i7rQRAwZMgQnnnmGV5//XXatWtX5Ovdu3enbt26vPbaa4VjX331FT/88AM9evSo6nIlSZIkacsWLYJrr4W2beH668Mwvssu8MAD8O23cOmlhnEVinSGfPDgwTz66KM899xzJCcnF+4LT0lJoUGDBqSkpHD++edz1VVX0bx5c5o0acKll15Kjx49StVhXZIkSZKqxMKFcNNNYfAuaDLdpQuMHAknnwyJidHWp7gU6bFnsRIOtZ86dSoDBgwAIDc3l6uvvprHHnuMtWvX0rt3byZPnlzikvVNeeyZJEmSpErz5Zdw443wyCOwYUM41qMHXHcdHH00lJB5VLOVNofG1TnklcFALkmSJKnCzZkTniE+fToURKpevcIgfsghBvFarlqeQy5JkiRJce2dd2DMGJg58/exE04Il6bvs09kZal6MpBLkiRJ0pYEAbzySjgj/q9/hWMJCXDmmTBiBOy+e7T1qdoykEuSJElScfLz4ZlnwiA+Z044Vq8enHtueHxZhw7R1qdqz0AuSZIkSRtbvx4eewzGjQubtkF4VNnFF8PVV8P220dbn2oMA7kkSZIkAeTmwt/+Fh5ftnBhONa0aXh2+GWXwXbbRVqeah4DuSRJkqTabeVKuPtumDABFi8Ox1JT4aqrYOBA8LQmVRIDuSRJkqTaadkyuP12uOMO+PXXcGzHHeHa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ySXmvffei3CtEa6NGzcaSaaqqqrDe2e39fz5801mZqZJTEw06enp5sYbbzQVFRURrC1C9eGHHxpJHf542rO9vd089thjJj093SQlJZnrrruuw2dg1KhRpri42OfY888/7/0M5OTkmE8++SRC/yIE0llb19TU+H1Pkvnwww+91zi7rYPdB2CNztr6xIkT5oYbbjDnnnuuSUhIMKNGjTIPPPBAh2BNv44Owb7DjTHmpZdeMv379zf19fV+r0G/jg6BvqOXL1/uLfP999+bX/3qV+acc84xAwYMMD/5yU+M2+3ucJ0zzwnlPo/ICtbWgfq9JFNTU+NzHc85oX739zTHfyoCAAAAAAAiiGfIAQAAAACwAIEcAAAAAAALEMgBAAAAALAAgRwAAAAAAAsQyAEAAAAAsACBHAAAAAAACxDIAQAAAACwAIEcAAAAAAALEMgBAEAH11xzjebPn2+b6wAAEIsI5AAA2ExRUZEcDoccDocSExN14YUX6sknn9SpU6esrlpAW7ZskcPhUH19vc/xt99+W4sWLbKmUgAA2Fy81RUAAAAdFRQUaPny5Tp58qQ2bNiguXPnKiEhQY8++qjVVeuSwYMHW10FAABsixFyAABsKCkpSS6XS6NGjdKcOXM0bdo0rVu3Tv/+9791991365xzztGAAQM0ffp0VVdXe89bsWKF0tLStHbtWl100UVyOp3Kz8/XN9984y1TVFSkmTNn+vy8+fPn65prrglYn1dffVWXX365kpOT5XK5dMcdd6iurk6S9PXXX+vaa6+VJJ1zzjlyOBwqKiqS1HHKeqj137hxo8aNG6dBgwapoKBAbrc7zP9JAADsi0AOAEAU6N+/v1paWlRUVKQdO3Zo3bp1KisrkzFGN954o1pbW71lT5w4oT/84Q9auXKltm3bpvr6es2ePbtbP7+1tVWLFi3SZ599prVr1+rrr7/2hu6RI0fqb3/7mySpqqpKbrdbf/7zn/1eJ9T6L1myRK+++qo++ugjHThwQA8//HC36g8AgB0xZR0AABszxmjz5s3auHGjpk+frrVr12rbtm264oorJEmvvfaaRo4cqbVr1+rWW2+VdDo8/+Uvf1Fubq4k6ZVXXtG4ceNUXl6unJycsOpx3333ef9+wQUX6LnnntOUKVN07NgxDRo0yDs1fdiwYUpLS/N7jerqaq1bty6k+r/44osaPXq0JGnevHl68sknw6o3AAB2xgg5AAA29O6772rQoEFyOp2aPn26Zs2apaKiIsXHx3uDtiQNGTJEY8aM0d69e73H4uPjNWXKFO/rsWPHKi0tzadMV+3cuVMzZsxQZmamkpOTdfXVV0uSDhw4EPI19u7dG1L9BwwY4A3jkpSRkeGdHg8AQCwhkAMAYEPXXnutdu/ererqan3//fd65ZVX5HA4euTacXFxMsb4HDtzyvjZjh8/rvz8fKWkpOi1117Tp59+qjVr1kiSWlpaeqROZ0pISPB57XA4OtQXAIBYQCAHAMCGBg4cqAsvvFCZmZmKjz/9hNm4ceN06tQpbd++3VvuyJEjqqqqUnZ2tvfYqVOntGPHDu/rqqoq1dfXa9y4cZKkc889t8Miabt37w5Yl3/+8586cuSInnrqKV111VUaO3ZshxHrxMRESVJbW1vA64RafwAA+goCOQAAUeKiiy5SYWGhHnjgAX388cf67LPPdNddd2nEiBEqLCz0lktISNBDDz2k7du3a+fOnSoqKtIPf/hD7/PjU6dO1Y4dO7Ry5UpVV1eruLhYlZWVAX9uZmamEhMT9fzzz+tf//qX1q1b12Fv8VGjRsnhcOjdd9/Vd999p2PHjoVdfwAA+goCOQAAUWT58uWaPHmyfvzjHysvL0/GGG3YsMFnmveAAQO0cOFC3XHHHbryyis1aNAgvfnmm9738/Pz9dhjj+n3v/+9pkyZoqamJt19990Bf+a5556rFStWaPXq1crOztZTTz2lJUuW+JQZMWKESkpK9Mgjjyg9PV3z5s0Lu/4AAPQVDsNDWQAAxIwVK1Zo/vz5qq+vt7oqAAAgCEbIAQAAAACwAIEcAAAAAAALMGUdAAAAAAALMEIOAAAAAIAFCOQAAAAAAFiAQA4AAAAAgAUI5AAAAAAAWIBADgAAAACABQjkAAAAAABYgEAOAAAAAIAFCOQAAAAAAFjg/wNg+aVL+hHFSgAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 63
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
